package com.omg.server.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class PropertiesHelper {
	
	private static final Log logger = LogFactory.getLog(PropertiesHelper.class);
	public static final String DEFAULTPROP_NAME = "application";
	private static Map<String, Properties>  propsMap =  new HashMap<String, Properties>();
	
	/**
	 * 系统启动时调用些方法加载配置文件路径的配置文件
	 */
	public static void iniProperties(String filePath){	
		
	    if (null == propsMap.get(DEFAULTPROP_NAME)){
	    	addProperties(DEFAULTPROP_NAME, filePath);
	    }
	}
	
	//初始化文件路径属性文件
	public static void initDefaultProps(Properties properites){
		 if (null == propsMap.get(DEFAULTPROP_NAME)){
			 propsMap.put(DEFAULTPROP_NAME, properites);
		 }
	}
	
	/**
	 * 通过享元模式来管理属性文件的实例, 以key值映射具体的属性文件
	 * @param moduleName  模块名
	 * @param filePath
	 * @return
	 */
	public static Properties addProperties(String moduleName, String filePath){
		Properties props = null;
		
	    if (null == propsMap.get(moduleName)){
	    	synchronized(PropertiesHelper.class){  //避免重复初始化
	    		if (null == propsMap.get(moduleName)){
				    props = new Properties();
			    	try{
			    	    File file = new File(filePath);
					    props.load(new FileInputStream(file));
					    propsMap.put(moduleName, props);
					    return props;
			    	}
			    	catch (FileNotFoundException e) {
						logger.error(filePath+" 加载错误.", e);
					}
					catch (IOException e) {
						logger.error(filePath+" 文件读写错误.", e);
					}
	    		}
	    	}
		 }
	    else{
	    	props = propsMap.get(moduleName);
	    }
	    
	    return props;
	}
	
	/**
	 * 获取模块属性文件中的key的值
	 * @param moduleName 模块名
	 * @param key 属性文件中的key
	 * @return
	 */
	public static String getValue(String moduleName, String key){
		String value = null;
		if (null != propsMap.get(moduleName)){
			value =  propsMap.get(moduleName).getProperty(key);
		}
		return value;
	}
	
	/**
	 * 获取文件路径配置属性值
	 * @param key 属性文件中的key
	 * @return
	 */
	public static String getProperty(String key){
		String value = "";
		if (null != propsMap.get(DEFAULTPROP_NAME)){
			value =  propsMap.get(DEFAULTPROP_NAME).getProperty(key);
		}
		return value;
	}
	
	
}
